public class ByteUtils {

    /**
     * 将long值转换为8字节的字节数组 大端序
     *
     * @param value 要转换的long值
     * @return 包含该long值的8字节表示形式的字节数组
     */
    public static byte[] longToBytes(long value) {
        return new byte[]{
                (byte) (value >>> 56),
                (byte) (value >>> 48),
                (byte) (value >>> 40),
                (byte) (value >>> 32),
                (byte) (value >>> 24),
                (byte) (value >>> 16),
                (byte) (value >>> 8),
                (byte) value
        };
    }


    /**
     * 将int值转换为4字节的字节数组 大端序
     *
     * @param value 要转换的int值
     * @return 包含该int值的4字节表示形式的字节数组
     */
    public static byte[] intToBytes(int value) {
        return new byte[]{
                (byte) (value >>> 24),
                (byte) (value >>> 16),
                (byte) (value >>> 8),
                (byte) value
        };
    }

    /**
     * 将int值转换为4字节的字节数组 大端序
     *
     * @param value 要转换的int值
     * @return 包含该int值的4字节表示形式的字节数组
     */
    public static byte[] shortToBytes(int value) {
        return new byte[]{
                (byte) (value >>> 8),
                (byte) value
        };
    }

    /**
     * 寻找startcode
     * @param data
     * @param fromIndex
     * @return
     */
    public static int findStartCode(byte[] data, int fromIndex) {
        for (int i = fromIndex; i < data.length - 3; i++) {
            if ((data[i] == 0) && (data[i + 1] == 0) && (data[i + 2] == 0) && (data[i + 3] == 1)) {
                return i;
            }
        }
        return -1;
    }


}
